// 日期时间格式化工具

/**
 * 格式化日期时间为中文可读格式
 * @param {string|Date} dateTime - 日期时间字符串或Date对象
 * @param {string} format - 格式类型: 'full', 'date', 'time', 'datetime'
 * @returns {string} 格式化后的字符串
 */
export function formatDateTime(dateTime, format = 'full') {
  if (!dateTime) return '';
  
  const date = new Date(dateTime);
  
  // 检查日期是否有效
  if (isNaN(date.getTime())) {
    return '';
  }
  
  const now = new Date();
  const today = new Date(now.getFullYear(), now.getMonth(), now.getDate());
  const yesterday = new Date(today.getTime() - 24 * 60 * 60 * 1000);
  const tomorrow = new Date(today.getTime() + 24 * 60 * 60 * 1000);
  const dateOnly = new Date(date.getFullYear(), date.getMonth(), date.getDate());
  
  const year = date.getFullYear();
  const month = String(date.getMonth() + 1).padStart(2, '0');
  const day = String(date.getDate()).padStart(2, '0');
  const hours = String(date.getHours()).padStart(2, '0');
  const minutes = String(date.getMinutes()).padStart(2, '0');
  const seconds = String(date.getSeconds()).padStart(2, '0');
  
  // 根据格式类型返回不同格式
  switch (format) {
    case 'date':
      if (dateOnly.getTime() === today.getTime()) {
        return '今天';
      } else if (dateOnly.getTime() === yesterday.getTime()) {
        return '昨天';
      } else if (dateOnly.getTime() === tomorrow.getTime()) {
        return '明天';
      } else {
        return `${year}年${month}月${day}日`;
      }
      
    case 'time':
      return `${hours}:${minutes}`;
      
    case 'datetime':
      let dateStr;
      if (dateOnly.getTime() === today.getTime()) {
        dateStr = '今天';
      } else if (dateOnly.getTime() === yesterday.getTime()) {
        dateStr = '昨天';
      } else if (dateOnly.getTime() === tomorrow.getTime()) {
        dateStr = '明天';
      } else {
        dateStr = `${month}月${day}日`;
      }
      return `${dateStr} ${hours}:${minutes}`;
      
    case 'full':
    default:
      let fullDateStr;
      if (dateOnly.getTime() === today.getTime()) {
        fullDateStr = '今天';
      } else if (dateOnly.getTime() === yesterday.getTime()) {
        fullDateStr = '昨天';
      } else if (dateOnly.getTime() === tomorrow.getTime()) {
        fullDateStr = '明天';
      } else {
        // 如果是今年，不显示年份
        if (year === now.getFullYear()) {
          fullDateStr = `${month}月${day}日`;
        } else {
          fullDateStr = `${year}年${month}月${day}日`;
        }
      }
      return `${fullDateStr} ${hours}:${minutes}`;
  }
}

/**
 * 格式化预订时间段
 * @param {string} startTime - 开始时间
 * @param {string} endTime - 结束时间
 * @returns {string} 格式化后的时间段
 */
export function formatTimeSlot(startTime, endTime) {
  if (!startTime || !endTime) return '';
  
  const start = formatDateTime(startTime, 'time');
  const end = formatDateTime(endTime, 'time');
  
  return `${start} - ${end}`;
}

/**
 * 格式化创建时间（相对时间）
 * @param {string|Date} dateTime - 日期时间
 * @returns {string} 相对时间描述
 */
export function formatRelativeTime(dateTime) {
  if (!dateTime) return '';
  
  const date = new Date(dateTime);
  const now = new Date();
  const diff = now.getTime() - date.getTime();
  
  const minutes = Math.floor(diff / (1000 * 60));
  const hours = Math.floor(diff / (1000 * 60 * 60));
  const days = Math.floor(diff / (1000 * 60 * 60 * 24));
  
  if (minutes < 1) {
    return '刚刚';
  } else if (minutes < 60) {
    return `${minutes}分钟前`;
  } else if (hours < 24) {
    return `${hours}小时前`;
  } else if (days < 7) {
    return `${days}天前`;
  } else {
    return formatDateTime(dateTime, 'full');
  }
}

/**
 * 格式化预订日期
 * @param {string} dateStr - 日期字符串 (YYYY-MM-DD)
 * @returns {string} 格式化后的日期
 */
export function formatBookingDate(dateStr) {
  if (!dateStr) return '';
  
  const date = new Date(dateStr + 'T00:00:00');
  return formatDateTime(date, 'date');
}

/**
 * 解析并格式化复合时间字符串
 * 处理类似 "2025-06-16T16:00:00.000Z 14:00" 的格式
 * @param {string} timeStr - 时间字符串
 * @returns {string} 格式化后的时间
 */
export function parseAndFormatTime(timeStr) {
  if (!timeStr) return '';
  
  // 如果包含空格，说明是复合格式
  if (timeStr.includes(' ')) {
    const parts = timeStr.split(' ');
    const datePart = parts[0];
    const timePart = parts[1];
    
    // 解析日期部分
    const date = new Date(datePart);
    if (isNaN(date.getTime())) {
      return timeStr; // 如果解析失败，返回原字符串
    }
    
    // 使用时间部分
    const [hours, minutes] = timePart.split(':');
    date.setHours(parseInt(hours), parseInt(minutes), 0, 0);
    
    return formatDateTime(date, 'full');
  }
  
  // 普通格式直接处理
  return formatDateTime(timeStr, 'full');
}
